#pragma once
#include "DAabb.h"
#include "DVector3.h"

namespace Skill
{
	namespace Ode
	{		
		void DAabb::CollectManagedMemory()
		{
			_Min = nullptr;
			_Max = nullptr;
		}

		DAabb::DAabb()
		{
			_SetPointer(new dReal[6](),true);
		}
		DAabb::DAabb(DVector3^ min , DVector3^ max)
		{
			_SetPointer(new dReal[6](),true);
			_This[0] = min->_This[0];
			_This[1] = max->_This[0];

			_This[2] = min->_This[1];
			_This[3] = max->_This[1];

			_This[4] = min->_This[2];
			_This[5] = max->_This[2];
		}

		DVector3^ DAabb::Min::get()
		{
			if(!_Min)
				_Min = gcnew DVector3();
			_Min[0] = _This[0];
			_Min[1] = _This[2];
			_Min[2] = _This[4];
			return _Min;
		}

		void DAabb::Min::set(DVector3^ value)
		{
			_This[0] = value->_This[0];
			_This[2] = value->_This[1];
			_This[4] = value->_This[2];
		}

		DVector3^ DAabb::Max::get()
		{
			if(!_Max)
				_Max = gcnew DVector3();
			_Max[0] = _This[1];
			_Max[1] = _This[3];
			_Max[2] = _This[5];
			return _Max;
		}

		void DAabb::Max::set(DVector3^ value)
		{
			_This[1] = value->_This[0];
			_This[3] = value->_This[1];
			_This[5] = value->_This[2];
		}

		dReal DAabb::MinX::get(){return _This[0];}
		void  DAabb::MinX::set(dReal value){_This[0] = value;}

		dReal DAabb::MinY::get(){return _This[2];}
		void  DAabb::MinY::set(dReal value){_This[2] = value;}

		dReal DAabb::MinZ::get(){return _This[4];}
		void  DAabb::MinZ::set(dReal value){_This[4] = value;}

		dReal DAabb::MaxX::get(){return _This[1];}
		void  DAabb::MaxX::set(dReal value){_This[1] = value;}

		dReal DAabb::MaxY::get(){return _This[3];}
		void  DAabb::MaxY::set(dReal value){_This[3] = value;}

		dReal DAabb::MaxZ::get(){return _This[5];}
		void  DAabb::MaxZ::set(dReal value){_This[5] = value;}
	}
}